home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 January - Disc 2 / Macworld (1999-01) (Disk 2).dmg / Serious Demos / Symbolic Composer 4.2 / Environment / System / DEF / Define / Midi / def-controller < prev    next >
Lisp/Scheme  |  1998-10-23  |  3KB  |  76 lines

  1. def-controller controller-set <instruments&controls>
  2.  
  3. Describes MIDI continuous controllers for each instrument and each zone within an instrument's part. If no def-controller is defined then no controller data is generated. Controller information is generated at the speed of note-length values. To send controller information more often, define a dummy instrument with lengths of say 1/32 or 1/64 and target it to go on the same MIDI channel as the actual instrument. Any number of controllers are allowed. Controller sets are defined with def-controller-set.
  4.  
  5. (def-controller gm-controllers
  6.    (piano 
  7.       main-volume (list '(127)
  8.                          (vector-round 50 100 (gen-sin 1 0.3 16)))
  9.       modulation-wheel '((4) (5 6))
  10.    )
  11.    (sax
  12.       main-volume '((4) (5 6))
  13.       modulation-wheel (list '(65 70 80 90) 
  14.                               (vector-round 50 100
  15.                                             (gen-sin 1 0.3 32 180)))
  16.    )
  17. )
  18.  
  19. Each controller can have only 7-bit values, hence the need to round the vector values to the range from 0 to 127. If you need to access full 14-bit controllers you have to start from 14-bit values and then break the values into 7 upper bits and 7 lower bits and connect the resulting vectors to feed the coarce and fine controllers. Check your synthesizer manual for more details. In most cases the 7-bit controller values will be quite enough.
  20.  
  21. Controllers and compile-song
  22.  
  23. If you compile MIDI controllers with compile-song each column in a timesheet represents a zone lasting the duration of the timesheet resolution. To get more control over large sections of a composition use separate controller-only instruments. Then read both files to your sequencer. This example shows how to produce both files.
  24.  
  25. (def-symbol
  26.    sax '(a b c d)
  27.    sax-controller nil
  28. )
  29.  
  30. (def-program gm-sound-set
  31.    sax alto-sax
  32. )
  33.  
  34. (def-length
  35.    default '1/16
  36.    sax-controller '1/32
  37. )
  38.  
  39. (def-channel
  40.    sax 1
  41.    sax-controller 1
  42. )
  43.  
  44. (setq chords (activate-tonality (blues1 c 4) (blues1 d 4)))
  45.  
  46. (compile-song "ccl;output:" 1/1 "timesheet test"
  47. ; --instruments--             !---!---!---!---!---!---!---!---!
  48. master            chords     " . . . ."
  49. sax               master     "- ------"
  50. )
  51.  
  52. ;; now define sax-controller zones
  53.  
  54. (def-zone
  55.    sax-controller '(4/1 4/1)
  56. )
  57.  
  58. ;; and contents
  59.  
  60. (def-controller gm-controllers
  61.    (sax-controller
  62.       main-volume (list '(65 70 80 90) 
  63.                          (vector-round 50 100 
  64.                           (gen-sin 1 0.3 32 180)))
  65.       modulation-wheel  (list
  66.                            (vector-round 50 100 (gen-sin 2 0.3 32))
  67.                            (vector-round 50 100 (gen-sin 4 0.3 32)))
  68.    )
  69. )
  70.  
  71. ;; compile it to separate file
  72.  
  73. (compile-instrument "ccl;output:" separate
  74.    sax-controller
  75. )
  76.